Measurement exploratory data analysis

In [ ]:
from tabulate import tabulate
from IPython.display import Markdown, HTML
import matplotlib.pylab as plt
from typing import List, Tuple

import pandas as pd
import numpy as np
from scipy.signal import find_peaks
from scipy.signal import butter, lfilter

from tsfel.feature_extraction.features import fundamental_frequency

import os
import sys
sys.path.append('../../')
from feature import mafaulda as src
from feature import discovery as fdiscovery

pd.set_option("display.notebook_repr_html", False)

Define data sources

In [ ]:
DIR = '../../air_conditioning/'
file_list = [
    DIR + 'excool_digitalis/high_pressure_pump_40percent__1.tsv',
    DIR + 'excool_digitalis/high_pressure_pump_40percent__2.tsv',
    DIR + 'excool_digitalis/high_pressure_pump_40percent_speed_up__3.tsv',
    DIR + 'excool_digitalis/high_pressure_pump_80percent__4.tsv',
    DIR + 'shc2/compressor_shc2_klima4_bad.tsv',
    DIR + 'shc2/compressor_shc2_klima5_good.tsv',
    DIR + 'vertiv_digitalis/compressor_top_1.tsv',
    DIR + 'vertiv_digitalis/compressor_top_2.tsv',
    DIR + 'vertiv_digitalis/compressor_top_3.tsv',
    DIR + 'vertiv_digitalis/compressor_base.tsv',
    DIR + 'vertiv_digitalis/compressor_side.tsv'
]
Fs = 1160     # 1160 Hz +/-150 Hz (1020 - 1340 Hz)


file_list = [
    DIR + 'fan/speeds/1_still.tsv',
    DIR + 'fan/speeds/2_still.tsv',
    DIR + 'fan/speeds/3_still.tsv',
    DIR + 'fan/speeds/1_up.tsv',
    DIR + 'fan/speeds/2_up.tsv',
    DIR + 'fan/speeds/3_up.tsv',
    DIR + 'fan/speeds/1_down.tsv',
    DIR + 'fan/speeds/2_down.tsv',
    DIR + 'fan/speeds/3_down.tsv',
]
Fs = 2500

T_WAVEFORM = 5
T_SEC = T_WAVEFORM
NFFT = 1024

DATASET = []

Import dataset

In [ ]:
for filename in file_list:
    ts = pd.read_csv(filename, delimiter='\t', index_col=False, header=None, names=['x', 'y', 'z'])
    # Calculate amplitude in m/s^2 Beaglebone Black ADC and ADXL335 resolution (VIN 1.8V, 12bits)
    for dim in ts.columns:
        ts[dim] = ts[dim] * (1800 / 4096)  # ADC to mV
        ts[dim] = (ts[dim] / 180) * 9.81  # mV to m/s^2 (180 mV/g)
        ts[dim] -= ts[dim].mean()

    ts['t'] = ts.index * (1 / Fs)
    ts.set_index('t', inplace=True)
    DATASET.append((os.path.basename(filename), ts))
In [ ]:
for name, ts in DATASET:
    display(Markdown(f'**{name}**'))
    ts.info()
    print()

1_still.tsv

<class 'pandas.core.frame.DataFrame'>
Index: 38201 entries, 0.0 to 15.280000000000001
Data columns (total 3 columns):
 #   Column  Non-Null Count  Dtype  
---  ------  --------------  -----  
 0   x       38201 non-null  float64
 1   y       38200 non-null  float64
 2   z       38200 non-null  float64
dtypes: float64(3)
memory usage: 1.2 MB

2_still.tsv

<class 'pandas.core.frame.DataFrame'>
Index: 38201 entries, 0.0 to 15.280000000000001
Data columns (total 3 columns):
 #   Column  Non-Null Count  Dtype  
---  ------  --------------  -----  
 0   x       38201 non-null  float64
 1   y       38200 non-null  float64
 2   z       38200 non-null  float64
dtypes: float64(3)
memory usage: 1.2 MB

3_still.tsv

<class 'pandas.core.frame.DataFrame'>
Index: 38201 entries, 0.0 to 15.280000000000001
Data columns (total 3 columns):
 #   Column  Non-Null Count  Dtype  
---  ------  --------------  -----  
 0   x       38201 non-null  float64
 1   y       38200 non-null  float64
 2   z       38200 non-null  float64
dtypes: float64(3)
memory usage: 1.2 MB

1_up.tsv

<class 'pandas.core.frame.DataFrame'>
Index: 38201 entries, 0.0 to 15.280000000000001
Data columns (total 3 columns):
 #   Column  Non-Null Count  Dtype  
---  ------  --------------  -----  
 0   x       38201 non-null  float64
 1   y       38200 non-null  float64
 2   z       38200 non-null  float64
dtypes: float64(3)
memory usage: 1.2 MB

2_up.tsv

<class 'pandas.core.frame.DataFrame'>
Index: 38201 entries, 0.0 to 15.280000000000001
Data columns (total 3 columns):
 #   Column  Non-Null Count  Dtype  
---  ------  --------------  -----  
 0   x       38201 non-null  float64
 1   y       38200 non-null  float64
 2   z       38200 non-null  float64
dtypes: float64(3)
memory usage: 1.2 MB

3_up.tsv

<class 'pandas.core.frame.DataFrame'>
Index: 38201 entries, 0.0 to 15.280000000000001
Data columns (total 3 columns):
 #   Column  Non-Null Count  Dtype  
---  ------  --------------  -----  
 0   x       38201 non-null  float64
 1   y       38200 non-null  float64
 2   z       38200 non-null  float64
dtypes: float64(3)
memory usage: 1.2 MB

1_down.tsv

<class 'pandas.core.frame.DataFrame'>
Index: 38201 entries, 0.0 to 15.280000000000001
Data columns (total 3 columns):
 #   Column  Non-Null Count  Dtype  
---  ------  --------------  -----  
 0   x       38201 non-null  float64
 1   y       38200 non-null  float64
 2   z       38200 non-null  float64
dtypes: float64(3)
memory usage: 1.2 MB

2_down.tsv

<class 'pandas.core.frame.DataFrame'>
Index: 38201 entries, 0.0 to 15.280000000000001
Data columns (total 3 columns):
 #   Column  Non-Null Count  Dtype  
---  ------  --------------  -----  
 0   x       38201 non-null  float64
 1   y       38200 non-null  float64
 2   z       38200 non-null  float64
dtypes: float64(3)
memory usage: 1.2 MB

3_down.tsv

<class 'pandas.core.frame.DataFrame'>
Index: 38201 entries, 0.0 to 15.280000000000001
Data columns (total 3 columns):
 #   Column  Non-Null Count  Dtype  
---  ------  --------------  -----  
 0   x       38201 non-null  float64
 1   y       38200 non-null  float64
 2   z       38200 non-null  float64
dtypes: float64(3)
memory usage: 1.2 MB

In [ ]:
for name, ts in DATASET:
    display(Markdown(f'**{name}**'))
    display(tabulate(ts.describe(), headers='keys', tablefmt='html'))

1_still.tsv

x y z
count38201 38200 38200
mean -2.40499e-15 3.95579e-15 3.23185e-15
std 0.875637 1.2639 0.0920418
min -9.07143 -2.52106 -0.348954
25% -0.593063 -1.108 -0.061552
50% 0.0056921 -0.00628912 0.0102986
75% 0.580497 1.11937 0.058199
max 1.96961 2.43663 0.345601

2_still.tsv

x y z
count38201 38200 38200
mean 5.15893e-15 6.06082e-15 2.94447e-15
std 2.56549 2.48179 0.322518
min -9.24575 -3.73282 -0.952338
25% -2.44389 -2.63111 -0.281733
50% 0.430129 0.0752644 0.00566968
75% 2.27429 2.56608 0.269122
max 4.04661 3.66779 0.987628

3_still.tsv

x y z
count38201 38200 38200
mean 2.19072e-15 -3.27184e-16 1.05735e-14
std 2.15206 2.64354 0.396043
min -9.32173 -4.12174 -0.786905
25% -2.13667 -2.58893 -0.379752
50% -0.244608 -0.0502045 0.00345146
75% 1.95881 2.56635 0.362704
max 3.92273 4.21293 0.841708

1_up.tsv

x y z
count38201 38200 38200
mean 7.1722e-16 1.16068e-15 -4.63229e-15
std 0.851834 1.19633 0.160765
min -9.19537 -2.62078 -0.818255
25% -0.381696 -0.704763 -0.0757992
50% 0.00150719 -0.010207 -0.00394865
75% 0.408661 0.756199 0.0679019
max 2.01332 2.57641 0.930109

2_up.tsv

x y z
count38201 38200 38200
mean 1.32693e-15 -5.37892e-15 3.77964e-16
std 2.54069 2.40738 0.506515
min -9.66708 -4.29866 -1.69449
25% -1.97907 -2.23894 -0.305381
50% 0.00879927 0.0123751 0.0778218
75% 1.99667 2.16789 0.341274
max 5.58919 4.61081 1.44298

3_up.tsv

x y z
count38201 38200 38200
mean 1.09015e-15 -3.60256e-15 1.23954e-15
std 1.69941 2.35114 0.38339
min -9.81719 -4.07792 -0.81214
25% -1.53042 -2.18586 -0.333137
50% -0.0694594 0.0415091 0.00216618
75% 1.3436 2.10123 0.337469
max 3.93022 4.23279 1.12783

1_down.tsv

x y z
count38201 38200 38200
mean 6.07666e-15 -9.52239e-15 -2.13758e-15
std 0.276292 0.355092 0.0934928
min -9.08741 -2.01469 -0.868043
25% -0.0342404 -0.0268261 -0.0297866
50% -0.0102902 -0.0028759 0.0181137
75% 0.01366 0.0210743 0.0420639
max 3.34274 2.05684 0.664769

2_down.tsv

x y z
count38201 38200 38200
mean -3.53755e-15 4.22792e-16 2.48355e-15
std 0.911499 0.87873 0.242263
min -9.16459 -3.82467 -1.76085
25% -0.0156161 -0.0405354 -0.0124892
50% 0.00833407 0.007365 0.0354112
75% 0.0322843 0.0313152 0.0833116
max 4.89417 3.9352 1.56822

3_down.tsv

x y z
count38201 38200 38200
mean 3.38727e-15 -9.63697e-16 -5.49685e-15
std 0.676631 0.924902 0.236818
min -9.08527 -3.8726 -3.24596
25% -0.0321006 -0.0405711 -0.0126823
50% 0.0157998 0.00732926 0.0591683
75% 0.03975 0.0552297 0.0831185
max 3.77598 4.22256 7.81903

Time domain waveform

In [ ]:
axis = ['x', 'y', 'z']
for name, ts in DATASET:
    display(Markdown(f'**{name}**'))
    
    ax = ts[axis].plot(figsize=(20, 8), grid=True, subplots=True)
    for i, axname in enumerate(axis):
        ax[i].set_xlabel('Time [s]')
        ax[i].set_ylabel(f'Amplitude ({axname}) [m/s^2]')
    plt.show()               # plt.savefig('waveform.png')

1_still.tsv

No description has been provided for this image

2_still.tsv

No description has been provided for this image

3_still.tsv

No description has been provided for this image

1_up.tsv

No description has been provided for this image

2_up.tsv

No description has been provided for this image

3_up.tsv

No description has been provided for this image

1_down.tsv

No description has been provided for this image

2_down.tsv

No description has been provided for this image

3_down.tsv

No description has been provided for this image

Time domain waveform zoom detail

In [ ]:
axis = ['x', 'y', 'z']
for name, ts in DATASET:
    display(Markdown(f'**{name}**'))
    ax = (ts[axis].iloc[int(T_WAVEFORM*Fs):int(T_WAVEFORM*Fs)+Fs]
                  .plot(figsize=(20, 10), grid=True, subplots=True))
    
    for i, axname in enumerate(axis):
        ax[i].set_xlabel('Time [s]')
        ax[i].set_ylabel(f'Amplitude ({axname}) [m/s^2]')
        plt.show()      # plt.savefig('waveform_zoom.png')

1_still.tsv

No description has been provided for this image

2_still.tsv

No description has been provided for this image

3_still.tsv

No description has been provided for this image

1_up.tsv

No description has been provided for this image

2_up.tsv

No description has been provided for this image

3_up.tsv

No description has been provided for this image

1_down.tsv

No description has been provided for this image

2_down.tsv

No description has been provided for this image

3_down.tsv

No description has been provided for this image
In [ ]:
def spectogram(x):
    fig, ax = plt.subplots(figsize=(15, 4))
    cmap = plt.get_cmap('inferno')
    pxx, freqs, t, im = plt.specgram(
        x, NFFT=NFFT, Fs=Fs,
        detrend='mean',
        mode='magnitude', scale='dB',
        cmap=cmap, vmin=-60
    )
    fig.colorbar(im, aspect=20, pad=0.04)
    ax.set_xlabel('Time [s]')
    ax.set_ylabel('Frequency [Hz]')
    src.resolution_calc(Fs, NFFT)
    return freqs, pxx

def window_idx(t):
    return (Fs * t) // NFFT + 1

def spectrum_slice(freqs, Pxx, t):
    fig, ax = plt.subplots(2, 1, figsize=(20, 8))
    n = window_idx(t)

    dB = 20 * np.log10(Pxx.T[n] / 0.000001)
    ax[0].plot(freqs, dB)      # 1 dB = 1 um/s^2
    ax[0].grid(True)
    ax[0].set_xlabel('Frequency [Hz]')
    ax[0].set_ylabel('Amplitude [dB]')
    
    ax[1].plot(freqs, Pxx.T[n])
    ax[1].grid(True)
    ax[1].set_xlabel('Frequency [Hz]')
    ax[1].set_ylabel('Amplitude [m/s^2]')
    return n


def get_max_frequency(freqs, Pxx, i):
    max_freq = freqs[np.argmax(Pxx.T[i])]
    return max_freq


def get_peaks(freqs, Pxx, i, top=5):
    amplitudes = Pxx.T[i]
    peaks, _ = find_peaks(amplitudes, distance=3)

    fundamental = get_max_frequency(freqs, Pxx, i)
    f_top = freqs[peaks[np.argsort(amplitudes[peaks])]][::-top]
    y_top = np.sort(amplitudes[peaks])[::-top]

    return pd.DataFrame({
        'f': f_top,
        'y': y_top,
        '1x': f_top / fundamental 
    })


def butter_bandpass_filter(data, lowcut, highcut, fs, order=5):
    b, a = butter(order, [lowcut, highcut], fs=fs, btype='band')
    y = lfilter(b, a, data)
    return y


def get_spectrograms(DATASET: List[pd.DataFrame], axis: str) -> list:
    spectrograms = []

    for name, ts in DATASET:
        base_freq = fundamental_frequency(ts[axis], Fs)
        display(Markdown(f'**{name}** *({axis.upper()} axis, Fundamental = {base_freq:.4f} Hz)*'))
        
        freqs, Pxx = spectogram(ts['x'])
        spectrograms.append((name, freqs, Pxx))
        plt.show()          # plt.savefig(f'x_axis_fft_{NFFT}.png')
    
    return spectrograms


def show_spectrogram_detail(spectrograms: list, axis: str, t: float):
    for name, freqs, Pxx in spectrograms:
        display(Markdown(f'**{name}** ({axis.upper()} axis @ {t}s)'))
        i_window = spectrum_slice(freqs, Pxx, t)
        # Incorrect fundamental frequency:
        # print(fdiscovery.harmonic_product_spectrum(freqs, Pxx.T[i_window]))
        plt.show()           #plt.savefig(f'x_axis_fft_{NFFT}_at_{T_SEC}s.png')


def show_mms_peaks(spectrograms: list, axis: str, t: float):
    for name, freqs, Pxx in spectrograms:
        display(Markdown(f'**{name}** ({axis.upper()} axis @ {t}s)'))
    
        i_window = window_idx(t)
        peaks = fdiscovery.mms_peak_finder(Pxx.T[i_window])
        
        fig, ax = plt.subplots(1, 1, figsize=(15, 3))
        ax.grid(True)
        ax.plot(freqs, Pxx.T[i_window])
        ax.scatter(freqs[peaks], Pxx.T[i_window][peaks], marker='^', color='red')
        ax.set_xlabel('Frequency [Hz]')
        
        plt.show()


def show_harmonic_series(spectrograms: list, axis: str, t: float):
    # https://stackoverflow.com/questions/1982770/changing-the-color-of-an-axis
    for name, freqs, Pxx in spectrograms:
        display(Markdown(f'**{name}** ({axis.upper()} axis @ {t}s)'))
    
        i_window = window_idx(t)
        h_series = fdiscovery.harmonic_series_detection(freqs, Pxx.T[i_window], Fs, NFFT)
    
        # Find best (sum of harmonics' amplitudes in the largest)
        max_harmonic_amp_idx = np.argmax([
            sum([h[1] for h in s]) / len(s)
            for s in h_series
        ])
        best_harmonic_series = pd.DataFrame(
            h_series[max_harmonic_amp_idx],
            columns=['Frequency [Hz]', 'Amplitude [m/s^2]']
        )
        best_harmonic_series.index += 1
        display(tabulate(best_harmonic_series, headers='keys', tablefmt='html'))
    
        # Plot found harmonic series
        fig, ax = plt.subplots(1, 8, figsize=(30, 4))
        for i in range(8):
            s = h_series[i+1]
            if i == max_harmonic_amp_idx:
                ax[i].xaxis.label.set_color('red')
    
            ax[i].plot(freqs, Pxx.T[i_window])
            ax[i].scatter([x[0] for x in s], [x[1] for x in s], marker='^', color='red')
            ax[i].set_xlabel('Frequency [Hz]')
    
        plt.show()

def show_spectra_largest_amplitudes(spectrograms: list, axis: str, t: float):
    for name, freqs, Pxx in spectrograms:
        display(Markdown(f'**{name}** ({axis.upper()} axis @ {t}s)'))

        i_window = window_idx(t)
        x_fundamental = get_max_frequency(freqs, Pxx, i_window)
        peaks = get_peaks(freqs, Pxx, i_window)
        
        display(Markdown(f'- *Fundamental frequency:* {x_fundamental} Hz'))
        display(tabulate(peaks.head(5), headers='keys', tablefmt='html'))

Spectrogram in X axis

In [ ]:
x_spectra = get_spectrograms(DATASET, 'x')

1_still.tsv (X axis, Fundamental = 18.4550 Hz)

Window size: 1024
Heinsenberg box
	Time step: 409.6 ms
	Frequency step: 2.44140625 Hz
No description has been provided for this image

2_still.tsv (X axis, Fundamental = 20.3529 Hz)

Window size: 1024
Heinsenberg box
	Time step: 409.6 ms
	Frequency step: 2.44140625 Hz
No description has been provided for this image

3_still.tsv (X axis, Fundamental = 21.9890 Hz)

Window size: 1024
Heinsenberg box
	Time step: 409.6 ms
	Frequency step: 2.44140625 Hz
No description has been provided for this image

1_up.tsv (X axis, Fundamental = 18.5205 Hz)

Window size: 1024
Heinsenberg box
	Time step: 409.6 ms
	Frequency step: 2.44140625 Hz
No description has been provided for this image

2_up.tsv (X axis, Fundamental = 20.4183 Hz)

Window size: 1024
Heinsenberg box
	Time step: 409.6 ms
	Frequency step: 2.44140625 Hz
No description has been provided for this image

3_up.tsv (X axis, Fundamental = 22.0544 Hz)

Window size: 1024
Heinsenberg box
	Time step: 409.6 ms
	Frequency step: 2.44140625 Hz
No description has been provided for this image

1_down.tsv (X axis, Fundamental = 17.2116 Hz)

Window size: 1024
Heinsenberg box
	Time step: 409.6 ms
	Frequency step: 2.44140625 Hz
No description has been provided for this image

2_down.tsv (X axis, Fundamental = 20.3529 Hz)

Window size: 1024
Heinsenberg box
	Time step: 409.6 ms
	Frequency step: 2.44140625 Hz
No description has been provided for this image

3_down.tsv (X axis, Fundamental = 21.4000 Hz)

Window size: 1024
Heinsenberg box
	Time step: 409.6 ms
	Frequency step: 2.44140625 Hz
No description has been provided for this image

Spectrogram detail in X axis

In [ ]:
show_spectrogram_detail(x_spectra, 'x', T_SEC)

1_still.tsv (X axis @ 5s)

No description has been provided for this image

2_still.tsv (X axis @ 5s)

No description has been provided for this image

3_still.tsv (X axis @ 5s)

No description has been provided for this image

1_up.tsv (X axis @ 5s)

No description has been provided for this image

2_up.tsv (X axis @ 5s)

No description has been provided for this image

3_up.tsv (X axis @ 5s)

No description has been provided for this image

1_down.tsv (X axis @ 5s)

No description has been provided for this image

2_down.tsv (X axis @ 5s)

No description has been provided for this image

3_down.tsv (X axis @ 5s)

No description has been provided for this image

Peaks in frequency spectrum in X axis

  • MMS peak finder algorithm
In [ ]:
show_mms_peaks(x_spectra, 'x', T_SEC)

1_still.tsv (X axis @ 5s)

No description has been provided for this image

2_still.tsv (X axis @ 5s)

No description has been provided for this image

3_still.tsv (X axis @ 5s)

No description has been provided for this image

1_up.tsv (X axis @ 5s)

No description has been provided for this image

2_up.tsv (X axis @ 5s)

No description has been provided for this image

3_up.tsv (X axis @ 5s)

No description has been provided for this image

1_down.tsv (X axis @ 5s)

No description has been provided for this image

2_down.tsv (X axis @ 5s)

No description has been provided for this image

3_down.tsv (X axis @ 5s)

No description has been provided for this image

Harmonic series detection in X axis

In [ ]:
show_harmonic_series(x_spectra, 'x', T_SEC)

1_still.tsv (X axis @ 5s)

Frequency [Hz] Amplitude [m/s^2]
1 19.5312 0.546024
2 36.6211 0.0221022
3 56.1523 0.0854366
4 73.2422 0.00486936
5 92.7734 0.00363132
6 134.277 0.00462071
7 285.645 0.00223661
8 778.809 0.00111313
No description has been provided for this image

2_still.tsv (X axis @ 5s)

Frequency [Hz] Amplitude [m/s^2]
1 19.5312 1.60475
2 41.5039 0.476521
3 61.0352 0.128852
4 73.2422 0.00488967
5 134.277 0.00695457
6 229.492 0.0033906
7 437.012 0.00108532
8 1044.92 0.000367557
No description has been provided for this image

3_still.tsv (X axis @ 5s)

Frequency [Hz] Amplitude [m/s^2]
1 21.9727 1.49894
2 43.9453 0.252232
3 65.918 0.185653
4 87.8906 0.0101309
5 185.547 0.00249273
6 292.969 0.00785039
7 314.941 0.011506
No description has been provided for this image

1_up.tsv (X axis @ 5s)

Frequency [Hz] Amplitude [m/s^2]
1 17.0898 0.468103
2 36.6211 0.0218309
3 53.7109 0.300899
4 70.8008 0.0112762
5 136.719 0.00141639
6 205.078 0.00174178
7 458.984 0.000805989
No description has been provided for this image

2_up.tsv (X axis @ 5s)

Frequency [Hz] Amplitude [m/s^2]
1 19.5312 2.06101
2 41.5039 0.291134
3 61.0352 0.0746276
4 78.125 0.0223562
5 112.305 0.0122052
6 209.961 0.00244761
7 361.328 0.00291835
8 437.012 0.000683408
No description has been provided for this image

3_up.tsv (X axis @ 5s)

Frequency [Hz] Amplitude [m/s^2]
1 21.9727 1.00514
2 43.9453 0.206071
3 65.918 0.145704
4 87.8906 0.00827826
5 146.484 0.00109411
6 187.988 0.00169469
7 314.941 0.0100025
No description has been provided for this image

1_down.tsv (X axis @ 5s)

Frequency [Hz] Amplitude [m/s^2]
1 4.88281 0.00608786
2 9.76562 0.00201308
3 9.76562 0.00201308
4 17.0898 0.0147896
5 24.4141 0.00791007
6 31.7383 0.00874098
7 63.4766 0.00307372
8 288.086 0.000580757
No description has been provided for this image

2_down.tsv (X axis @ 5s)

Frequency [Hz] Amplitude [m/s^2]
1 4.88281 0.0179338
2 4.88281 0.0179338
3 12.207 0.00271084
4 19.5312 0.0323693
5 19.5312 0.0323693
6 26.8555 0.00722242
7 80.5664 0.00146388
8 144.043 0.0021425
9 520.02 0.000464282
No description has been provided for this image

3_down.tsv (X axis @ 5s)

Frequency [Hz] Amplitude [m/s^2]
1 4.88281 0.0178097
2 4.88281 0.0178097
3 21.9727 0.0823231
4 21.9727 0.0823231
5 31.7383 0.0157251
6 43.9453 0.0165751
7 100.098 0.0016314
8 375.977 0.000959079
9 895.996 0.000618653
No description has been provided for this image
In [ ]:
show_spectra_largest_amplitudes(x_spectra, 'x', T_SEC)

1_still.tsv (X axis @ 5s)

  • Fundamental frequency: 19.53125 Hz
f y 1x
0 19.53120.546024 1
1195.312 0.0096457610
2134.277 0.00462071 6.875
3214.844 0.0027503411
4412.598 0.0024323121.125

2_still.tsv (X axis @ 5s)

  • Fundamental frequency: 19.53125 Hz
f y 1x
0 19.53121.60475 1
1 51.26950.0283099 2.625
2195.312 0.010183 10
3273.438 0.0056699414
4332.031 0.0047059617

3_still.tsv (X axis @ 5s)

  • Fundamental frequency: 21.97265625 Hz
f y 1x
0 21.9727 1.49894 1
1314.941 0.011506 14.3333
2329.59 0.0085340815
3 97.6562 0.00731069 4.44444
4 9.765620.00419778 0.444444

1_up.tsv (X axis @ 5s)

  • Fundamental frequency: 17.08984375 Hz
f y 1x
0 17.08980.468103 1
1 70.80080.0112762 4.14286
2295.41 0.0067000617.2857
3144.043 0.00419564 8.42857
4 87.89060.00272608 5.14286

2_up.tsv (X axis @ 5s)

  • Fundamental frequency: 19.53125 Hz
f y 1x
0 19.53122.06101 1
1 78.125 0.0223562 4
2178.223 0.00997867 9.125
3307.617 0.0061318915.75
4314.941 0.0048611816.125

3_up.tsv (X axis @ 5s)

  • Fundamental frequency: 21.97265625 Hz
f y 1x
0 21.97271.00514 1
1195.312 0.0102214 8.88889
2292.969 0.0089147413.3333
3 12.207 0.00589523 0.555556
4163.574 0.00447052 7.44444

1_down.tsv (X axis @ 5s)

  • Fundamental frequency: 17.08984375 Hz
f y 1x
0 17.08980.0147896 1
1 53.71090.00494662 3.14286
2205.078 0.0019790812
3 83.00780.00169884 4.85714
4173.34 0.0015201310.1429

2_down.tsv (X axis @ 5s)

  • Fundamental frequency: 19.53125 Hz
f y 1x
0 19.53120.0323693 1
1 48.82810.00282413 2.5
2163.574 0.00189572 8.375
3361.328 0.0015244718.5
4 80.56640.00146388 4.125

3_down.tsv (X axis @ 5s)

  • Fundamental frequency: 21.97265625 Hz
f y 1x
0 21.97270.0823231 1
1 65.918 0.006334 3
2190.43 0.00178213 8.66667
3339.355 0.0014655515.4444
4283.203 0.0012035112.8889

Spectrogram in Y axis

In [ ]:
y_spectra = get_spectrograms(DATASET, 'y')

1_still.tsv (Y axis, Fundamental = 0.0000 Hz)

Window size: 1024
Heinsenberg box
	Time step: 409.6 ms
	Frequency step: 2.44140625 Hz
No description has been provided for this image

2_still.tsv (Y axis, Fundamental = 0.0000 Hz)

Window size: 1024
Heinsenberg box
	Time step: 409.6 ms
	Frequency step: 2.44140625 Hz
No description has been provided for this image

3_still.tsv (Y axis, Fundamental = 0.0000 Hz)

Window size: 1024
Heinsenberg box
	Time step: 409.6 ms
	Frequency step: 2.44140625 Hz
No description has been provided for this image

1_up.tsv (Y axis, Fundamental = 0.0000 Hz)

Window size: 1024
Heinsenberg box
	Time step: 409.6 ms
	Frequency step: 2.44140625 Hz
No description has been provided for this image

2_up.tsv (Y axis, Fundamental = 0.0000 Hz)

Window size: 1024
Heinsenberg box
	Time step: 409.6 ms
	Frequency step: 2.44140625 Hz
No description has been provided for this image

3_up.tsv (Y axis, Fundamental = 0.0000 Hz)

Window size: 1024
Heinsenberg box
	Time step: 409.6 ms
	Frequency step: 2.44140625 Hz
No description has been provided for this image

1_down.tsv (Y axis, Fundamental = 0.0000 Hz)

Window size: 1024
Heinsenberg box
	Time step: 409.6 ms
	Frequency step: 2.44140625 Hz
No description has been provided for this image

2_down.tsv (Y axis, Fundamental = 0.0000 Hz)

Window size: 1024
Heinsenberg box
	Time step: 409.6 ms
	Frequency step: 2.44140625 Hz
No description has been provided for this image

3_down.tsv (Y axis, Fundamental = 0.0000 Hz)

Window size: 1024
Heinsenberg box
	Time step: 409.6 ms
	Frequency step: 2.44140625 Hz
No description has been provided for this image

Spectrogram detail in Y axis

In [ ]:
show_spectrogram_detail(y_spectra, 'y', T_SEC)

1_still.tsv (Y axis @ 5s)

No description has been provided for this image

2_still.tsv (Y axis @ 5s)

No description has been provided for this image

3_still.tsv (Y axis @ 5s)

No description has been provided for this image

1_up.tsv (Y axis @ 5s)

No description has been provided for this image

2_up.tsv (Y axis @ 5s)

No description has been provided for this image

3_up.tsv (Y axis @ 5s)

No description has been provided for this image

1_down.tsv (Y axis @ 5s)

No description has been provided for this image

2_down.tsv (Y axis @ 5s)

No description has been provided for this image

3_down.tsv (Y axis @ 5s)

No description has been provided for this image

Peaks in frequency spectrum in Y axis

In [ ]:
show_mms_peaks(y_spectra, 'y', T_SEC)

1_still.tsv (Y axis @ 5s)

No description has been provided for this image

2_still.tsv (Y axis @ 5s)

No description has been provided for this image

3_still.tsv (Y axis @ 5s)

No description has been provided for this image

1_up.tsv (Y axis @ 5s)

No description has been provided for this image

2_up.tsv (Y axis @ 5s)

No description has been provided for this image

3_up.tsv (Y axis @ 5s)

No description has been provided for this image

1_down.tsv (Y axis @ 5s)

No description has been provided for this image

2_down.tsv (Y axis @ 5s)

No description has been provided for this image

3_down.tsv (Y axis @ 5s)

No description has been provided for this image

Harmonic series detection in Y axis

In [ ]:
show_harmonic_series(y_spectra, 'y', T_SEC)

1_still.tsv (Y axis @ 5s)

Frequency [Hz] Amplitude [m/s^2]
1 19.5312 0.546024
2 36.6211 0.0221022
3 56.1523 0.0854366
4 73.2422 0.00486936
5 92.7734 0.00363132
6 134.277 0.00462071
7 285.645 0.00223661
8 778.809 0.00111313
No description has been provided for this image

2_still.tsv (Y axis @ 5s)

Frequency [Hz] Amplitude [m/s^2]
1 19.5312 1.60475
2 41.5039 0.476521
3 61.0352 0.128852
4 73.2422 0.00488967
5 134.277 0.00695457
6 229.492 0.0033906
7 437.012 0.00108532
8 1044.92 0.000367557
No description has been provided for this image

3_still.tsv (Y axis @ 5s)

Frequency [Hz] Amplitude [m/s^2]
1 21.9727 1.49894
2 43.9453 0.252232
3 65.918 0.185653
4 87.8906 0.0101309
5 185.547 0.00249273
6 292.969 0.00785039
7 314.941 0.011506
No description has been provided for this image

1_up.tsv (Y axis @ 5s)

Frequency [Hz] Amplitude [m/s^2]
1 17.0898 0.468103
2 36.6211 0.0218309
3 53.7109 0.300899
4 70.8008 0.0112762
5 136.719 0.00141639
6 205.078 0.00174178
7 458.984 0.000805989
No description has been provided for this image

2_up.tsv (Y axis @ 5s)

Frequency [Hz] Amplitude [m/s^2]
1 19.5312 2.06101
2 41.5039 0.291134
3 61.0352 0.0746276
4 78.125 0.0223562
5 112.305 0.0122052
6 209.961 0.00244761
7 361.328 0.00291835
8 437.012 0.000683408
No description has been provided for this image

3_up.tsv (Y axis @ 5s)

Frequency [Hz] Amplitude [m/s^2]
1 21.9727 1.00514
2 43.9453 0.206071
3 65.918 0.145704
4 87.8906 0.00827826
5 146.484 0.00109411
6 187.988 0.00169469
7 314.941 0.0100025
No description has been provided for this image

1_down.tsv (Y axis @ 5s)

Frequency [Hz] Amplitude [m/s^2]
1 4.88281 0.00608786
2 9.76562 0.00201308
3 9.76562 0.00201308
4 17.0898 0.0147896
5 24.4141 0.00791007
6 31.7383 0.00874098
7 63.4766 0.00307372
8 288.086 0.000580757
No description has been provided for this image

2_down.tsv (Y axis @ 5s)

Frequency [Hz] Amplitude [m/s^2]
1 4.88281 0.0179338
2 4.88281 0.0179338
3 12.207 0.00271084
4 19.5312 0.0323693
5 19.5312 0.0323693
6 26.8555 0.00722242
7 80.5664 0.00146388
8 144.043 0.0021425
9 520.02 0.000464282
No description has been provided for this image

3_down.tsv (Y axis @ 5s)

Frequency [Hz] Amplitude [m/s^2]
1 4.88281 0.0178097
2 4.88281 0.0178097
3 21.9727 0.0823231
4 21.9727 0.0823231
5 31.7383 0.0157251
6 43.9453 0.0165751
7 100.098 0.0016314
8 375.977 0.000959079
9 895.996 0.000618653
No description has been provided for this image
In [ ]:
show_spectra_largest_amplitudes(y_spectra, 'y', T_SEC)

1_still.tsv (Y axis @ 5s)

  • Fundamental frequency: 19.53125 Hz
f y 1x
0 19.53120.546024 1
1195.312 0.0096457610
2134.277 0.00462071 6.875
3214.844 0.0027503411
4412.598 0.0024323121.125

2_still.tsv (Y axis @ 5s)

  • Fundamental frequency: 19.53125 Hz
f y 1x
0 19.53121.60475 1
1 51.26950.0283099 2.625
2195.312 0.010183 10
3273.438 0.0056699414
4332.031 0.0047059617

3_still.tsv (Y axis @ 5s)

  • Fundamental frequency: 21.97265625 Hz
f y 1x
0 21.9727 1.49894 1
1314.941 0.011506 14.3333
2329.59 0.0085340815
3 97.6562 0.00731069 4.44444
4 9.765620.00419778 0.444444

1_up.tsv (Y axis @ 5s)

  • Fundamental frequency: 17.08984375 Hz
f y 1x
0 17.08980.468103 1
1 70.80080.0112762 4.14286
2295.41 0.0067000617.2857
3144.043 0.00419564 8.42857
4 87.89060.00272608 5.14286

2_up.tsv (Y axis @ 5s)

  • Fundamental frequency: 19.53125 Hz
f y 1x
0 19.53122.06101 1
1 78.125 0.0223562 4
2178.223 0.00997867 9.125
3307.617 0.0061318915.75
4314.941 0.0048611816.125

3_up.tsv (Y axis @ 5s)

  • Fundamental frequency: 21.97265625 Hz
f y 1x
0 21.97271.00514 1
1195.312 0.0102214 8.88889
2292.969 0.0089147413.3333
3 12.207 0.00589523 0.555556
4163.574 0.00447052 7.44444

1_down.tsv (Y axis @ 5s)

  • Fundamental frequency: 17.08984375 Hz
f y 1x
0 17.08980.0147896 1
1 53.71090.00494662 3.14286
2205.078 0.0019790812
3 83.00780.00169884 4.85714
4173.34 0.0015201310.1429

2_down.tsv (Y axis @ 5s)

  • Fundamental frequency: 19.53125 Hz
f y 1x
0 19.53120.0323693 1
1 48.82810.00282413 2.5
2163.574 0.00189572 8.375
3361.328 0.0015244718.5
4 80.56640.00146388 4.125

3_down.tsv (Y axis @ 5s)

  • Fundamental frequency: 21.97265625 Hz
f y 1x
0 21.97270.0823231 1
1 65.918 0.006334 3
2190.43 0.00178213 8.66667
3339.355 0.0014655515.4444
4283.203 0.0012035112.8889

Spectrogram in Z axis

In [ ]:
z_spectra = get_spectrograms(DATASET, 'z')

1_still.tsv (Z axis, Fundamental = 0.0000 Hz)

Window size: 1024
Heinsenberg box
	Time step: 409.6 ms
	Frequency step: 2.44140625 Hz
No description has been provided for this image

2_still.tsv (Z axis, Fundamental = 0.0000 Hz)

Window size: 1024
Heinsenberg box
	Time step: 409.6 ms
	Frequency step: 2.44140625 Hz
No description has been provided for this image

3_still.tsv (Z axis, Fundamental = 0.0000 Hz)

Window size: 1024
Heinsenberg box
	Time step: 409.6 ms
	Frequency step: 2.44140625 Hz
No description has been provided for this image

1_up.tsv (Z axis, Fundamental = 0.0000 Hz)

Window size: 1024
Heinsenberg box
	Time step: 409.6 ms
	Frequency step: 2.44140625 Hz
No description has been provided for this image

2_up.tsv (Z axis, Fundamental = 0.0000 Hz)

Window size: 1024
Heinsenberg box
	Time step: 409.6 ms
	Frequency step: 2.44140625 Hz
No description has been provided for this image

3_up.tsv (Z axis, Fundamental = 0.0000 Hz)

Window size: 1024
Heinsenberg box
	Time step: 409.6 ms
	Frequency step: 2.44140625 Hz
No description has been provided for this image

1_down.tsv (Z axis, Fundamental = 0.0000 Hz)

Window size: 1024
Heinsenberg box
	Time step: 409.6 ms
	Frequency step: 2.44140625 Hz
No description has been provided for this image

2_down.tsv (Z axis, Fundamental = 0.0000 Hz)

Window size: 1024
Heinsenberg box
	Time step: 409.6 ms
	Frequency step: 2.44140625 Hz
No description has been provided for this image

3_down.tsv (Z axis, Fundamental = 0.0000 Hz)

Window size: 1024
Heinsenberg box
	Time step: 409.6 ms
	Frequency step: 2.44140625 Hz
No description has been provided for this image

Spectrogram detail in Z axis

In [ ]:
show_spectrogram_detail(z_spectra, 'z', T_SEC)

1_still.tsv (Z axis @ 5s)

No description has been provided for this image

2_still.tsv (Z axis @ 5s)

No description has been provided for this image

3_still.tsv (Z axis @ 5s)

No description has been provided for this image

1_up.tsv (Z axis @ 5s)

No description has been provided for this image

2_up.tsv (Z axis @ 5s)

No description has been provided for this image

3_up.tsv (Z axis @ 5s)

No description has been provided for this image

1_down.tsv (Z axis @ 5s)

No description has been provided for this image

2_down.tsv (Z axis @ 5s)

No description has been provided for this image

3_down.tsv (Z axis @ 5s)

No description has been provided for this image

Peaks in frequency spectrum in Z axis

In [ ]:
show_mms_peaks(z_spectra, 'z', T_SEC)

1_still.tsv (Z axis @ 5s)

No description has been provided for this image

2_still.tsv (Z axis @ 5s)

No description has been provided for this image

3_still.tsv (Z axis @ 5s)

No description has been provided for this image

1_up.tsv (Z axis @ 5s)

No description has been provided for this image

2_up.tsv (Z axis @ 5s)

No description has been provided for this image

3_up.tsv (Z axis @ 5s)

No description has been provided for this image

1_down.tsv (Z axis @ 5s)

No description has been provided for this image

2_down.tsv (Z axis @ 5s)

No description has been provided for this image

3_down.tsv (Z axis @ 5s)

No description has been provided for this image

Harmonic series detection in Z axis

In [ ]:
show_harmonic_series(z_spectra, 'z', T_SEC)

1_still.tsv (Z axis @ 5s)

Frequency [Hz] Amplitude [m/s^2]
1 19.5312 0.546024
2 36.6211 0.0221022
3 56.1523 0.0854366
4 73.2422 0.00486936
5 92.7734 0.00363132
6 134.277 0.00462071
7 285.645 0.00223661
8 778.809 0.00111313
No description has been provided for this image

2_still.tsv (Z axis @ 5s)

Frequency [Hz] Amplitude [m/s^2]
1 19.5312 1.60475
2 41.5039 0.476521
3 61.0352 0.128852
4 73.2422 0.00488967
5 134.277 0.00695457
6 229.492 0.0033906
7 437.012 0.00108532
8 1044.92 0.000367557
No description has been provided for this image

3_still.tsv (Z axis @ 5s)

Frequency [Hz] Amplitude [m/s^2]
1 21.9727 1.49894
2 43.9453 0.252232
3 65.918 0.185653
4 87.8906 0.0101309
5 185.547 0.00249273
6 292.969 0.00785039
7 314.941 0.011506
No description has been provided for this image

1_up.tsv (Z axis @ 5s)

Frequency [Hz] Amplitude [m/s^2]
1 17.0898 0.468103
2 36.6211 0.0218309
3 53.7109 0.300899
4 70.8008 0.0112762
5 136.719 0.00141639
6 205.078 0.00174178
7 458.984 0.000805989
No description has been provided for this image

2_up.tsv (Z axis @ 5s)

Frequency [Hz] Amplitude [m/s^2]
1 19.5312 2.06101
2 41.5039 0.291134
3 61.0352 0.0746276
4 78.125 0.0223562
5 112.305 0.0122052
6 209.961 0.00244761
7 361.328 0.00291835
8 437.012 0.000683408
No description has been provided for this image

3_up.tsv (Z axis @ 5s)

Frequency [Hz] Amplitude [m/s^2]
1 21.9727 1.00514
2 43.9453 0.206071
3 65.918 0.145704
4 87.8906 0.00827826
5 146.484 0.00109411
6 187.988 0.00169469
7 314.941 0.0100025
No description has been provided for this image

1_down.tsv (Z axis @ 5s)

Frequency [Hz] Amplitude [m/s^2]
1 4.88281 0.00608786
2 9.76562 0.00201308
3 9.76562 0.00201308
4 17.0898 0.0147896
5 24.4141 0.00791007
6 31.7383 0.00874098
7 63.4766 0.00307372
8 288.086 0.000580757
No description has been provided for this image

2_down.tsv (Z axis @ 5s)

Frequency [Hz] Amplitude [m/s^2]
1 4.88281 0.0179338
2 4.88281 0.0179338
3 12.207 0.00271084
4 19.5312 0.0323693
5 19.5312 0.0323693
6 26.8555 0.00722242
7 80.5664 0.00146388
8 144.043 0.0021425
9 520.02 0.000464282
No description has been provided for this image

3_down.tsv (Z axis @ 5s)

Frequency [Hz] Amplitude [m/s^2]
1 4.88281 0.0178097
2 4.88281 0.0178097
3 21.9727 0.0823231
4 21.9727 0.0823231
5 31.7383 0.0157251
6 43.9453 0.0165751
7 100.098 0.0016314
8 375.977 0.000959079
9 895.996 0.000618653
No description has been provided for this image
In [ ]:
show_spectra_largest_amplitudes(z_spectra, 'z', T_SEC)

1_still.tsv (Z axis @ 5s)

  • Fundamental frequency: 19.53125 Hz
f y 1x
0 19.53120.546024 1
1195.312 0.0096457610
2134.277 0.00462071 6.875
3214.844 0.0027503411
4412.598 0.0024323121.125

2_still.tsv (Z axis @ 5s)

  • Fundamental frequency: 19.53125 Hz
f y 1x
0 19.53121.60475 1
1 51.26950.0283099 2.625
2195.312 0.010183 10
3273.438 0.0056699414
4332.031 0.0047059617

3_still.tsv (Z axis @ 5s)

  • Fundamental frequency: 21.97265625 Hz
f y 1x
0 21.9727 1.49894 1
1314.941 0.011506 14.3333
2329.59 0.0085340815
3 97.6562 0.00731069 4.44444
4 9.765620.00419778 0.444444

1_up.tsv (Z axis @ 5s)

  • Fundamental frequency: 17.08984375 Hz
f y 1x
0 17.08980.468103 1
1 70.80080.0112762 4.14286
2295.41 0.0067000617.2857
3144.043 0.00419564 8.42857
4 87.89060.00272608 5.14286

2_up.tsv (Z axis @ 5s)

  • Fundamental frequency: 19.53125 Hz
f y 1x
0 19.53122.06101 1
1 78.125 0.0223562 4
2178.223 0.00997867 9.125
3307.617 0.0061318915.75
4314.941 0.0048611816.125

3_up.tsv (Z axis @ 5s)

  • Fundamental frequency: 21.97265625 Hz
f y 1x
0 21.97271.00514 1
1195.312 0.0102214 8.88889
2292.969 0.0089147413.3333
3 12.207 0.00589523 0.555556
4163.574 0.00447052 7.44444

1_down.tsv (Z axis @ 5s)

  • Fundamental frequency: 17.08984375 Hz
f y 1x
0 17.08980.0147896 1
1 53.71090.00494662 3.14286
2205.078 0.0019790812
3 83.00780.00169884 4.85714
4173.34 0.0015201310.1429

2_down.tsv (Z axis @ 5s)

  • Fundamental frequency: 19.53125 Hz
f y 1x
0 19.53120.0323693 1
1 48.82810.00282413 2.5
2163.574 0.00189572 8.375
3361.328 0.0015244718.5
4 80.56640.00146388 4.125

3_down.tsv (Z axis @ 5s)

  • Fundamental frequency: 21.97265625 Hz
f y 1x
0 21.97270.0823231 1
1 65.918 0.006334 3
2190.43 0.00178213 8.66667
3339.355 0.0014655515.4444
4283.203 0.0012035112.8889

Histogram

In [ ]:
axis = ['x', 'y', 'z']
for name, ts in DATASET:
    display(Markdown(f'**{name}**'))
    ts[axis].hist(figsize=(10, 5), grid=True, bins=50)
    plt.show()

1_still.tsv

No description has been provided for this image

2_still.tsv

No description has been provided for this image

3_still.tsv

No description has been provided for this image

1_up.tsv

No description has been provided for this image

2_up.tsv

No description has been provided for this image

3_up.tsv

No description has been provided for this image

1_down.tsv

No description has been provided for this image

2_down.tsv

No description has been provided for this image

3_down.tsv

No description has been provided for this image

Orbitals of all cross sections

In [ ]:
for name, ts in DATASET:
    display(Markdown(f'**{name}**'))
    fig, ax = plt.subplots(1, 3, figsize=(20, 4))

    for i, col in enumerate([('x', 'y'), ('x', 'z'), ('y', 'z')]):
        ax[i].scatter(ts[col[0]], ts[col[1]], s=1)
        ax[i].grid(True)
        ax[i].set_xlabel(col[0].upper())
        ax[i].set_ylabel(col[1].upper())
        ax[i].grid(True)
    plt.show()       # plt.savefig('orbitals.png')

1_still.tsv

No description has been provided for this image

2_still.tsv

No description has been provided for this image

3_still.tsv

No description has been provided for this image

1_up.tsv

No description has been provided for this image

2_up.tsv

No description has been provided for this image

3_up.tsv

No description has been provided for this image

1_down.tsv

No description has been provided for this image

2_down.tsv

No description has been provided for this image

3_down.tsv

No description has been provided for this image

Orbitals of 1x harmonic frequency

In [ ]:
x_spectra_by_name = {spec[0]: spec for spec in x_spectra}
y_spectra_by_name = {spec[0]: spec for spec in y_spectra}
z_spectra_by_name = {spec[0]: spec for spec in z_spectra}
t = 5
space = 5

for name, ts in DATASET:
    display(Markdown(f'**{name}**'))
    fig, ax = plt.subplots(1, 3, figsize=(20, 4))

    name, freqs, Pxx = x_spectra_by_name[name]
    x_fundamental = get_max_frequency(freqs, Pxx, window_idx(t))

    name, freqs, Pxx = y_spectra_by_name[name]
    y_fundamental = get_max_frequency(freqs, Pxx, window_idx(t))

    name, freqs, Pxx = z_spectra_by_name[name]
    z_fundamental = get_max_frequency(freqs, Pxx, window_idx(t))

    ts['x_1x'] = butter_bandpass_filter(ts['x'], x_fundamental - space, x_fundamental + space, Fs)
    ts['y_1x'] = butter_bandpass_filter(ts['y'], y_fundamental - space, y_fundamental + space, Fs)
    ts['z_1x'] = butter_bandpass_filter(ts['z'], z_fundamental - space, z_fundamental + space, Fs)
    
    for i, col in enumerate([('x_1x', 'y_1x'), ('x_1x', 'z_1x'), ('y_1x', 'z_1x')]):
        ax[i].scatter(ts[col[0]], ts[col[1]], s=1)
        ax[i].grid(True)
        ax[i].set_xlabel(col[0].upper())
        ax[i].set_ylabel(col[1].upper())
        ax[i].grid(True)
    
    plt.show()       # plt.savefig('orbitals_1x.png')

1_still.tsv

No description has been provided for this image

2_still.tsv

No description has been provided for this image

3_still.tsv

No description has been provided for this image

1_up.tsv

No description has been provided for this image

2_up.tsv

No description has been provided for this image

3_up.tsv

No description has been provided for this image

1_down.tsv

No description has been provided for this image

2_down.tsv

No description has been provided for this image

3_down.tsv

No description has been provided for this image